package ee.objectCloner;

//TODO change the names of shizzle to something like object-utils
public interface ObjectCloner {
	public <T> T clone(T source);
	public void copy(Object source, Object destination);
	
	/**
	 * Is needed by custom cloners if they don't want to check for immutable types. Checks for advisors, 
	 * otherwise prefers a copy.
	 * 
	 * @param source
	 * @param destination
	 * @return
	 */
	public <T> T copyOrClone(Object source, T destination);
	
	public void addCustomCloner(CustomCloner customCloner);
	public void addImmutable(Class<?> type);
	public void addCloneAdvisor(CloneAdvisor type);
}
